/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 沈明月
 * Date: 2023-01-01
 * Time: 15:59
 */

//接口：
//接口就是公共的行为规范标准，大家在实现时，只要符合规范标准，就可以通用
//在Java中，接口可以看成是：多个类的公共规范，是一种引用数据类型


//使用关键字interface来定义接口
//接口当中的成员，默认是public static final的
//接口里面的方法不能有具体实现的方法，只能是抽象方法，默认是public abstract的
//但是从JDK8开始，可以写一个default修饰的方法，用default修饰以后就可以看作普通方法了
//接口中不能有构造方法
//接口被类实现需要通过implements关键字
//接口中可以有static修饰的方法

/*interface IShape{
    public abstract void draw();
    //void play();//这样写也是默认被public abstract修饰的

    default public void func(){
        System.out.println("默认的！");
    }
    public static void func1(){
        System.out.println("画图！");
    }
}
class Rect implements IShape{
    public void draw(){
        System.out.println("⬜");
    }
}
class Flower implements IShape{
    public void draw(){
        System.out.println("❀");
    }
}

public class KnowledgeTwo {
    public static void drawMap(IShape shape){
        shape.draw();
    }
    public static void main(String[] args) {
        //IShape shape = new IShape();--->wrong
        //接口不能被实例化

        IShape shape1 = new Rect();
        IShape shape2 = new Flower();

        drawMap(shape1);
        drawMap(shape2);

        IShape.func1();
    }
}*/

/*
interface IShape{
    String name = "zhangsan";
    //接口中可以有变量，其变量会被隐式地指定为public static final变量

    void draw();
    //接口中每一个方法都是public的抽象方法，
    //接口中的方法会被隐式地指定为被public abstract修饰的方法，任何其他修饰都不行

}
class A implements IShape{
    public void draw(){

    }
}
*/

//创建接口时，接口的命名一般以大写字母I开头
//接口的命名一般使用形容词性的单词
//阿里编码规范中约定，接口中的方法和属性不要加任何修饰符号，保持代码的简洁性




//接口的使用：
//接口不能直接使用，必须要有一个实现类来实现该接口，实现接口中所有的抽象方法
//public class 类名称 implements 接口名称{}